package com.itheima.threadDemo.Demo11;

public class Demo11 {
    public static void main(String[] args) {
        //创建桌子对象,临界资源
        Desk desk = new Desk();
        //定义一个变量,控制生成汉堡数量
        int count = 7;
        //创建生产者线程启动
        new Thread(()->{
            for (int i = 1; i < count; i++) {
                //临界点桌子
                synchronized (desk){
                    //如果为真,有汉堡那就睡
                    if(desk.isFlag()){
                        try {
                            desk.wait();
                            i--;
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        //如果没有汉堡那就做汉堡,然后在叫醒吃货
                    }else{
                        //桌子上没有汉堡
                        desk.put(i);
                        //修改桌子状态
                        desk.setFlag(true);
                        //叫醒吃货
                        desk.notifyAll();
                    }
                }
            }
        }).start();
        //创建多线程消费者
        Thread consumer = new Thread(()->{
            while(true){
                synchronized (desk){
                    if(desk.isFlag()){
                        //如果为真那就吃
                        desk.take();
                        //吃完在将状态改成false
                        desk.setFlag(false);
                        //在唤醒生产者
                        desk.notifyAll();
                    }else {
                        try {
                            desk.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        });
        //将吃货设置为守护线程
        consumer.setDaemon(true);
        consumer.start();
    }
}
